home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / Scroll.cpp < prev    next >
C/C++ Source or Header  |  2000-01-16  |  2KB  |  90 lines

  1. #include "stdafx.h"
  2.  
  3. fix scroll_speed = (fix)0;
  4.  
  5. static fix fstart;
  6. static cTimer scrolltimer;
  7.  
  8. void reset_scrolling()
  9. {
  10.     // Set game area to start
  11.     
  12.     game_surface->reset();
  13.     back_surface->reset();
  14.     left_surface->reset();
  15.     right_surface->reset();
  16.  
  17.     fstart = 0;    
  18.     scrolltimer = 0;
  19.  
  20.     // Remove objects that are not on screen
  21.             
  22.     update_onscreen_list();
  23. }
  24.  
  25. void set_scroll_position(fix f)
  26. {    
  27.     // Check bounds
  28.  
  29.     if (f < (fix)0)
  30.         f = 0;
  31.     else if (f > (fix)(LEVEL_SIZE - GAME_DY))
  32.         f = LEVEL_SIZE - GAME_DY;
  33.     
  34.     // Set variable
  35.  
  36.     fstart = f;
  37.  
  38.     // Scroll to position
  39.     
  40.     game_surface->start = (int)f;
  41.  
  42.     if (!no_parallax)
  43.         back_surface->start = (int)f * back_surface->total_h / game_surface->total_h;
  44.  
  45.     //left_surface->start = (int)f * left_surface->total_h / game_surface->total_h;
  46.     //right_surface->start = (int)f * right_surface->total_h / game_surface->total_h;
  47.  
  48.     // Remove objects that are not on screen
  49.             
  50.     update_onscreen_list();
  51. }
  52.  
  53. void do_scrolling()
  54. {
  55.     // Get highest and lowest player
  56.     
  57.     int highest = game_surface->start, lowest = game_surface->start + game_surface->h;
  58.     
  59.     for (cPlayer *p = players; p != 0; p = (cPlayer *)p->next)
  60.     {
  61.         if (p->y > highest)
  62.             highest = p->y;
  63.         
  64.         if (p->y < lowest)
  65.             lowest = p->y;
  66.     }
  67.     
  68.     highest -= game_surface->start;
  69.     lowest -= game_surface->start;
  70.     
  71.     // Get new start position
  72.     
  73.     fix f, dt = scrolltimer.delta();
  74.     
  75.     if (lowest < NORMAL_SCROLL_ZONE)
  76.         f = fstart + dt * scroll_speed;
  77.     else
  78.         f = fstart + dt * (scroll_speed + ((fix)MAX_SCROLL_SPEED - scroll_speed) * (lowest - NORMAL_SCROLL_ZONE)  / (FAST_SCROLL_ZONE - NORMAL_SCROLL_ZONE));
  79.     
  80.     // Adjust scrolling if a player comes to the top of the screen
  81.     
  82.     if (highest > FAST_SCROLL_ZONE)
  83.         f += highest - FAST_SCROLL_ZONE;
  84.  
  85.     // Scroll
  86.  
  87.     set_scroll_position(f);
  88. }
  89.  
  90.